#pragma once


#include <stdbool.h>

typedef struct media_session* media_session_t;
typedef struct video_input* video_input_t;
typedef struct video_output* video_output_t;
typedef struct audio_input* audio_input_t;
typedef struct audio_output* audio_output_t;

void media_session_destroy(media_session_t m);
void video_input_destory(video_input_t v);
void video_output_destory(video_output_t v);
void audio_input_destory(audio_input_t v);
void audio_output_destory(audio_output_t v);

typedef void (*media_device_list_callback)(const char* name, void* udata);


media_session_t media_session_create();

int media_session_add_video(media_session_t m, video_input_t in, video_output_t out);

int media_session_add_audio(media_session_t m, audio_input_t in, audio_output_t out);

int media_session_start(media_session_t m);

int media_session_stop(media_session_t m);

int video_input_device_list(media_device_list_callback cb, void* udata);

int audio_input_device_list(media_device_list_callback cb, void* udata);


video_input_t video_input_from_device(const char* name);

video_output_t video_output_to_window(void* native_window);

audio_input_t audio_input_from_device(const char* name);

audio_output_t audio_output_default();


int media_session_resize_video(media_session_t m, int w, int h);

int media_session_set_fullscreen(media_session_t m, bool full);

int video_input_get_size(video_input_t in, int* w, int* h);

int media_session_save_screenshot(media_session_t m, const char* filename);


